<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="zh-Hans-CN" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="zh-Hans-CN" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <meta name="author" content="XenForo Ltd.">
  
  <link rel="shortcut icon" href="../img/favicon.ico">
  <title>设计样式 - XenForo 2.0 开发人员说明文档</title>
	<link rel="stylesheet" href="../css/theme.css" type="text/css" />
	<link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
		<link href="../extra.css?d=2020-11-03%2013%3A06%3A32.899428%2B00%3A00" rel="stylesheet">

  
  <script>
    // Current page data
    var mkdocs_page_name = "\u8bbe\u8ba1\u6837\u5f0f";
    var mkdocs_page_input_path = "designing-styles.md";
    var mkdocs_page_url = null;
  </script>
  

  
  

  
  <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>

  <script src="../js/modernizr-2.8.3.min.js" defer></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
  <script>hljs.initHighlightingOnLoad();</script> 
  
</head>

<body class="wy-body-for-nav" role="document">

  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
    <div class="wy-side-scroll">
      <div class="wy-side-nav-search">
        

        <div class="dropdown">
          <div class="lang_btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            <i class="icon fa-globe"></i>
          </div>

          <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
            <a class="dropdown-item" id="en" href="javascript:;">English</a>
            <a class="dropdown-item" id="zh_tw" href="javascript:;">繁体中文</a>
            <a class="dropdown-item" id="zh_cn" href="javascript:;">简体中文</a>
          </div>
        </div>
        <a href=".." class="icon icon-home"> XenForo 2.0<br>开发人员说明文档</a>
        <div role="search">
  <form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
    <input type="text" name="q" placeholder="搜寻文档" title="Type search term here" />
  </form>
</div>
        

      </div>

      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
        <ul class="current">
                    <li class="toctree-l1"><a class="" href="..">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">入门须知</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../template-syntax/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">模板语法</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../rest-api/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">REST API</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../add-on-structure/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">附加组件架构</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../development-tools/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">开发工具</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../general-concepts/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">通用概念</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../routing-basics/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">路由基础知识</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../controller-basics/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">控制器基础知识</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../entities-finders-repositories/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">数据实体、查找器、保存库</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../criteria/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">准则</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../managing-the-schema/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">管理 Schema</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1"><a class="" href="../lets-build-an-add-on/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">创建一个附加组件</font>
    </font>
</a>

                    </li>
                    <li class="toctree-l1 current"><a class="current" href="./">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">设计样式</font>
    </font>
</a>

    <ul class="subnav">
    <li class="toctree-l2">
    	<a href="#_2">
    		<font style="vertical-align: inherit;">
                <font style="vertical-align: inherit;">开启设计师模式</font>
            </font>
        </a>
    </li>
    <li class="toctree-l2">
    	<a href="#_3">
    		<font style="vertical-align: inherit;">
                <font style="vertical-align: inherit;">开启样式设计师模式</font>
            </font>
        </a>
    </li>
    <li class="toctree-l2">
    	<a href="#_4">
    		<font style="vertical-align: inherit;">
                <font style="vertical-align: inherit;">关闭样式设计师模式</font>
            </font>
        </a>
    </li>
    <li class="toctree-l2">
    	<a href="#_5">
    		<font style="vertical-align: inherit;">
                <font style="vertical-align: inherit;">什麽是输出，在哪里输出？</font>
            </font>
        </a>
    </li>
    <ul>
        <li>
	    	<a class="toctree-l3" href="#_6">
	    		<font style="vertical-align: inherit;">
	                <font style="vertical-align: inherit;">模板</font>
	            </font>
	        </a>
    	</li>
        <li>
	    	<a class="toctree-l3" href="#_7">
	    		<font style="vertical-align: inherit;">
	                <font style="vertical-align: inherit;">样式属性和群组</font>
	            </font>
	        </a>
    	</li>
    </ul>
    <li class="toctree-l2">
    	<a href="#_8">
    		<font style="vertical-align: inherit;">
                <font style="vertical-align: inherit;">修改特定模板</font>
            </font>
        </a>
    </li>
    <li class="toctree-l2">
    	<a href="#_9">
    		<font style="vertical-align: inherit;">
                <font style="vertical-align: inherit;">其他有用的命令</font>
            </font>
        </a>
    </li>
    <ul>
        <li>
	    	<a class="toctree-l3" href="#_10">
	    		<font style="vertical-align: inherit;">
	                <font style="vertical-align: inherit;">从数据库中导出</font>
	            </font>
	        </a>
    	</li>
        <li>
	    	<a class="toctree-l3" href="#_11">
	    		<font style="vertical-align: inherit;">
	                <font style="vertical-align: inherit;">从文件系统导入</font>
	            </font>
	        </a>
    	</li>
        <li>
	    	<a class="toctree-l3" href="#_12">
	    		<font style="vertical-align: inherit;">
	                <font style="vertical-align: inherit;">同步模板</font>
	            </font>
	        </a>
    	</li>
        <li>
	    	<a class="toctree-l3" href="#_13">
	    		<font style="vertical-align: inherit;">
	                <font style="vertical-align: inherit;">还原模板</font>
	            </font>
	        </a>
    	</li>
    </ul>
    </ul>

                    </li>
                    <li class="toctree-l1"><a class="" href="../scotchbox/">
    <font style="vertical-align: inherit;">
        <font style="vertical-align: inherit;">附录：Scotch Box</font>
    </font>
</a>

                    </li>
        </ul>
      </div>
    </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
        <a href="..">XenForo 2.0<br>开发人员说明文档</a>
      </nav>

      
      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href="..">首页</a> &raquo;</li>
    
      
    
    <li>设计样式</li>
    <li class="wy-breadcrumbs-aside">
      
        <a href="https://github.com/EverSoar/xenforo2doc/edit/master/docs/designing-styles.md"
          class="icon icon-github"> 在 GitHub 上编辑</a>
      
    </li>
  </ul>
  
  <hr/>
</div>
          <div role="main">
            <div class="section">
              
	<h1 id="_1">设计样式<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h1>
<p>在 XF2 中，我们引入了一种全新的方式来创建和编辑样式，称为 "设计师模式"。 设计师模式是一个 CLI 工具集合，允许您直接在文件系统中修改样式中的某些模板。 它还输出各种 metadata 和样式属性信息，这对版本控制和协同合作非常有帮助。</p>
<h2 id="_2">开启设计师模式<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<p>开启设计师模式的第一步是在 <code>config.php</code> 中激活它。</p>
<pre><code class="language-php">$config['designer']['enabled'] = true;
</code></pre>
<p>您也可以选择为设计器模式文件指定不同的路径存在于文件系统中。 以下是默认路径。 要改变路径，请在你的 <code>config.php</code> 中添加以下内容，并相应修改路径。</p>
<pre><code class="language-php">$config['designer']['basePath'] = 'src/styles';
</code></pre>
<h2 id="_3">开启样式设计师模式<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h2>
<p>设计师模式必须为每个样式明确激活。 我们通过使用 CLI 和指定样式的样式 ID，并选择 "设计师模式 ID" 来激活样式的设计师模式：</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:enable <em>[style_id]</em> <em>[designer_mode_id]</em></p>
</div>
<p>设计师模式 ID 是未来与设计师模式相关的命令中使用的标识符。 一旦开启，当前修改后的样式组件将被导出到 <code>[basePath]/[designer_mode_id]</code> 目录中。</p>
<p>当开启该样式的设计师模式时，如果该目录已经存在，你会有一个选择，即我们是否应该从样式中复盖该目录的当前内容，或者是否应该从该目录的当前内容中复盖当前样式。</p>
<h2 id="_4">关闭样式设计师模式<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<p>要关闭某个样式的设计师模式，您只需运行以下 CLI 命令。</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:disable <em>[designer_mode_id]</em></p>
</div>
<p>默认情况下，这将在文件系统中保留设计师模式的输出副本。 要删除数据，你可以用 <code>--clear</code> 选项运行同样的命令。</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:disable <em>[designer_mode_id]</em> --clear</p>
</div>
<h2 id="_5">什麽是输出，在哪里输出？<a class="headerlink" href="#_5" title="Permanent link">&para;</a></h2>
<p>重要的是要记住，XF 中的样式只由在该样式中 <strong>修改的内容</strong> 组成。 这意味着设计师模式的输出将只包括在样式中被修改的内容。 在父样式中被修改的模板和样式属性不会被输出。</p>
<h3 id="_6">模板<a class="headerlink" href="#_6" title="Permanent link">&para;</a></h3>
<p>模板将被输出到 <code>[basePath]/[designer_mode_id]/templates</code> 目录中。 在该目录中，您可以为每种类型（如 admin、email 和 public）设置另一个目录。</p>
<p>模板将以 HTML 格式输出，并可在文件系统中直接编辑。 在文件系统上所做的更改会在该模板加载到页面时被导入并编译。 同样，您也可以通过从文件系统中删除模板（如果它以前被修改过）来恢复它。</p>
<h3 id="_7">样式属性和群组<a class="headerlink" href="#_7" title="Permanent link">&para;</a></h3>
<p>样式属性和群组将被输出到 <code>[basePath]/[designer_mode_id]/style_properties</code> 和 <code>[basePath]/[designer_mode_id]/style_property_groups</code> 目录下。 它们以 JSON 格式导出，作为一种有用的方式，通过版本控制系统监控这些文件的变化。</p>
<p>不建议直接修改这些文件，因为对它们的修改 <strong>不会</strong> 像模板那样自动导入。</p>
<h2 id="_8">修改特定模板<a class="headerlink" href="#_8" title="Permanent link">&para;</a></h2>
<p>考虑到一个样式只代表在该样式中被修改的组件，当设计师模式开启时，文件系统也将只包含在该样式中被修改的组件。 这样就无法输出每个模板和样式属性的有效版本。</p>
<p>要将一个模板标记为样式中已修改的，您可以通过在 Admin CP 中编辑它的常规方式进行。 如果激活了设计器模式，在 Admin CP 中修改的模板和样式属性将自动写入文件系统。 然而，使用 CLI 命令来修改或 "touch" 一个模板可能会更方便。</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:touch-template <em>[designer_mode_id]</em> <em>[template_type:template_title]</em></p>
</div>
<p>只要指定的模板存在于父样式或主样式中，它就会被复制到当前样式中，并输出到文件系统中。 然后你可以直接在文件系统中修改模板。</p>
<p>如果你想在你的样式中创建一个完全自定义的模板（在树状结构中的任何其他样式中都不存在），你可以使用同样的命令，但你只需要传递 <code>--custom</code> 选项：</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:touch-template <em>[designer_mode_id]</em> <em>[template_type:template_title]</em> --custom</p>
</div>
<h2 id="_9">其他有用的命令<a class="headerlink" href="#_9" title="Permanent link">&para;</a></h2>
<p>还有其他一些与设计师模式有关的有用命令：</p>
<h3 id="_10">从数据库中导出<a class="headerlink" href="#_10" title="Permanent link">&para;</a></h3>
<p>当设计师模式被激活时，这个命令通常会自动运行，但如果出于某种原因，你想用当前数据库中的内容复盖文件系统副本，那麽你可以运行以下命令：</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:export <em>[designer_mode_id]</em></p>
</div>
<p>也可以只导出特定的类型，例如 <code>xf-designer:export-templates</code>。</p>
<h3 id="_11">从文件系统导入<a class="headerlink" href="#_11" title="Permanent link">&para;</a></h3>
<p>这条命令将用文件系统中的内容复盖数据库中的样式副本：</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:import <em>[designer_mode_id]</em></p>
</div>
<p>也可以只导入特定的类型，例如 <code>xf-designer:import-templates</code>。</p>
<h3 id="_12">同步模板<a class="headerlink" href="#_12" title="Permanent link">&para;</a></h3>
<p>该命令类似于导入模板（见上文），但它不会复盖所有内容，而只会导入模板，并在 metadata 发生变化时重新编译。 它还会相应地应用版本号更新。</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:sync-templates <em>[designer_mode_id]</em></p>
</div>
<h3 id="_13">还原模板<a class="headerlink" href="#_13" title="Permanent link">&para;</a></h3>
<p>这个命令可以用来恢复模板，有效地从当前样式中删除自定义版本。</p>
<div class="admonition terminal">
<p class="admonition-title">Terminal</p>
<p><em>$</em> php cmd.php xf-designer:revert-template <em>[designer_mode_id]</em> <em>[template_type:template_title]</em></p>
</div>
<p>也可以通过从文件系统中删除模板来触发还原。</p>

            </div>
          </div>
          

<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
  
  <a href="scotchbox/" class="btn btn-neutral float-right" title="附录：Scotch Box">下一页 <span class="icon icon-circle-arrow-right"></span></a>
  
  
  <a href="lets-build-an-add-on/" class="btn btn-neutral" title="创建一个附加组件"><span class="icon icon-circle-arrow-left"></span> 上一页</a>
  
</div>


<footer>
  <div role="contentinfo">
    <!-- Copyright etc -->
    
    <p><a href="https://xenforo.com/" target="_blank">XenForo 开发者说明文档&trade; &copy; 2017-2018 XenForo Ltd.</a></p>
    
    <p>
      使用 <a href="http://www.mkdocs.org">MkDocs</a> 构建，该文档基于 <a href="https://readthedocs.org">Read the Docs</a> 提供的 <a href="https://github.com/snide/sphinx_rtd_theme">主题</a>，并由 <a href="https://xenforo.com">XenForo Ltd</a> 修改。
    </p>
  </div>
</footer>
      
        </div>
      </div>

    </section>

  </div>

  <div class="rst-versions" role="note" aria-label="versions">
    <span class="rst-current-version" data-toggle="rst-current-version">
      
          <a href="https://github.com/EverSoar/xenforo2doc/" class="fa fa-github" style="float: left; color: #fcfcfc"> GitHub</a>
      
      
        <span><a href="../lets-build-an-add-on/" style="color: #fcfcfc;">&laquo; 上一页</a></span>
      
      
        <span style="margin-left: 15px"><a href="../scotchbox/" style="color: #fcfcfc">下一页 &raquo;</a></span>
      
    </span>
</div>
    <script>var base_url = '..';</script>
    <script src="../js/theme.js" defer></script>
    <script src="../js/lang.js" defer></script>
      <script src="../search/main.js" defer></script>

</body>
</html>
